/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mailserver;

import Message.Mensaje;
import SwConfMessage.Interfaz.IMailServer;
import SwConfMessage.Interfaz.IMensaje;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Adriana 
 * 
 * * @version 1.0.1  14 de Diciembre de 2013 
 */

public class MailServer1 implements IMailServer {
/**
 * Variable privada lista de MailServer
 */
    private ArrayList<Mensaje> listaMensajesServer;

    /**
     * Constructor de la Clase
     */
    
    public MailServer1() {
        listaMensajesServer = new ArrayList<Mensaje>();
    }

    /**
     * Funcion que retorna la cantidad de mensajes para el usuario que lo
     * solicita
     *
     * @param name
     * @return numero de mensajes
     */
    @Override
    public int getMessagesWaitting(String name) {
        int numeroMsj = 0;
        int cantidadMensajesServer = listaMensajesServer.size();

        while (cantidadMensajesServer > 0) {
            cantidadMensajesServer--;

            Mensaje mensaje = listaMensajesServer.get(cantidadMensajesServer);
            String namesender = mensaje.NombreDestino();

            numeroMsj = numeroMsj + isUser(namesender, name);
        }
        return (numeroMsj);
    }

    /**
     * Funcion que retorna 1 si es el usuario que solicita el msj.
     *
     * @param namesender
     * @param name
     * @return un entero
     */
    public int isUser(String namesender, String name) {
        if (namesender.equals(name)) {
            return 1;
        }
        return 0;
    }

    /**
     * Funcion que retorna el siguiente mensaje para el usuario que lo solicita
     *
     * @param name
     * @return Mensaje Solicitado
     */
    @Override
    public IMensaje getNextMessage(String name) {
        int indice = 0;
        int cantidadMensajesServer = listaMensajesServer.size();

        Mensaje mensaje = listaMensajesServer.get(indice);

        String namesender = mensaje.Sender();

        while (cantidadMensajesServer > indice && !namesender.equals(name)) {
            namesender = listaMensajesServer.get(indice).Sender();
            indice++;
        }


        if (indice < cantidadMensajesServer) {

            Mensaje mensajeMostrarse = listaMensajesServer.get(indice);
            listaMensajesServer.remove(indice);
            return (mensajeMostrarse);
        } 
            return (null);
        
    }

    /**
     * Metodo que toma el mensaje que pasa por parametro y dirige el mismo al
     * usuario que se encuentra especificado en el mensaje.
     *
     * @param message
     */
    @Override
    public void post(IMensaje message) {
     
//        String destinatario = ((Mensaje) message).NombreDestino();
//        String sender = ((Mensaje) message).Sender();
//        
//        
//        ((Mensaje) message).NombreDestino(sender);
//        ((Mensaje) message).Sender(destinatario);

        listaMensajesServer.add((Mensaje) message);
    }

    /**
     * Function que retorna una lista de String, que son las mensajes que
     * contiene el servidor.
     *
     * @return Lista
     */
    @Override
    public String toString() {
        String s = "";
        int n = 0;
        while (n < listaMensajesServer.size()) {
            s = s + listaMensajesServer.get(n).toString() + "\r\n";
            n++;
        }
        return s;
    }
}
